using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeoAnalyticsDesktopTools._SummarizeData
{
    /// <summary>
    /// <para>Describe Dataset</para>
    /// <para>Summarizes features into calculated field statistics,  sample features, and extent boundaries.</para>
    /// <para>将要素汇总为计算字段统计数据、样本要素和范围边界。</para>
    /// </summary>    
    [DisplayName("Describe Dataset")]
    public class DescribeDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DescribeDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_layer">
        /// <para>Input Layer</para>
        /// <para>The point, line, polygon, or tabular features to be described.</para>
        /// <para>要描述的点、线、面或表格要素。</para>
        /// </param>
        /// <param name="_output">
        /// <para>Output Table</para>
        /// <para>A new table with the summary information.</para>
        /// <para>包含摘要信息的新表。</para>
        /// </param>
        public DescribeDataset(object _input_layer, object _output)
        {
            this._input_layer = _input_layer;
            this._output = _output;
        }
        public override string ToolboxName => "GeoAnalytics Desktop Tools";

        public override string ToolName => "Describe Dataset";

        public override string CallName => "gapro.DescribeDataset";

        public override List<string> AcceptEnvironments => ["extent", "outputCoordinateSystem", "parallelProcessingFactor", "workspace"];

        public override object[] ParameterInfo => [_input_layer, _output, _sample_features, _sample_layer, _extent_layer];

        /// <summary>
        /// <para>Input Layer</para>
        /// <para>The point, line, polygon, or tabular features to be described.</para>
        /// <para>要描述的点、线、面或表格要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_layer { get; set; }


        /// <summary>
        /// <para>Output Table</para>
        /// <para>A new table with the summary information.</para>
        /// <para>包含摘要信息的新表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output { get; set; }


        /// <summary>
        /// <para>Number of Sample Features</para>
        /// <para>The number of features that will be included in the output sample layer. No sample is returned if you select 0 features or don't provide a number. By default, no sample layer is returned.</para>
        /// <para>将包含在输出采样图层中的要素数。如果选择 0 个要素或未提供编号，则不会返回任何样本。默认情况下，不返回任何采样图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Sample Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _sample_features { get; set; } = null;


        /// <summary>
        /// <para>Sample Layer</para>
        /// <para>A new feature class with a sample of the input data.</para>
        /// <para>包含输入数据样本的新要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample Layer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _sample_layer { get; set; } = null;


        /// <summary>
        /// <para>Extent Layer</para>
        /// <para>A new feature class with the spatial and temporal extent of the input data.</para>
        /// <para>具有输入数据的空间和时间范围的新要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Extent Layer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent_layer { get; set; } = null;


        public DescribeDataset SetEnv(object extent = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object workspace = null)
        {
            base.SetEnv(extent: extent, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, workspace: workspace);
            return this;
        }

    }

}